/**
 * 
 */
package br.srv.full.virtual.faces.manager.menu;

import java.util.Comparator;

import javax.faces.component.UIComponent;

/**
 * @author Delfino
 * 
 */
public class ComparadorUIComponent implements Comparator<UIComponent> {

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
	 */
	public int compare(UIComponent p_o1, UIComponent p_o2) {
		if (p_o1 == null && p_o2 != null)
			return 100;
		if (p_o2 == null && p_o1 != null)
			return -100;
		if (!p_o1.getClass().equals(p_o2.getClass()))
			return 50;

		return compare(p_o1.getId(), p_o2.getId());
	}

	/**
	 * @param p_id1
	 * @param p_id2
	 * @return
	 */
	private int compare(String p_id1, String p_id2) {
		if (p_id1 == null && p_id2 != null)
			return 75;
		if (p_id2 == null && p_id1 != null)
			return -75;
		if (p_id1.equals(p_id2))
			return 0;
		if (p_id1.equalsIgnoreCase(p_id2))
			return -1;
		// nesta avaliação náo pode retonrar 0, entáo verfica e retorna -1 se
		// necessário.
		int l_length = p_id1.length() - p_id2.length();
		return l_length == 0 ? -1 : l_length;
	}
}
